package br.com.damazzy.negocio.persistencia.dao;

import java.io.Serializable;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

import br.com.damazzy.conexao.Conexao;
import br.com.damazzy.negocio.entidade.TipoPagamento;

public class TipoPagamentoDaoImpl implements TipoPagamentoDao {

	public TipoPagamento alterar(TipoPagamento objeto) throws Exception {
		
		Connection conn = null;
		PreparedStatement ps = null;
		int cont = 1;
		
		try {
			conn = Conexao.criarConexao();
			
			StringBuffer sql = new StringBuffer();
			sql.append("update damazzy.tipopagamento set desctipopagamento = ?, bolativo = ? where idtipopagamento = ?");
			
			ps = conn.prepareStatement(sql.toString());
			ps.setString(cont++, objeto.getDescTipoPagamento());
			ps.setBoolean(cont++, objeto.getBolAtivo());
			ps.setInt(cont++, objeto.getIdTipoPagamento());
			
			ps.executeUpdate();
			
		} catch (Exception e) {
			e.printStackTrace();
			throw new Exception("Erro ao alterar o tipo de pagamento.");
		} finally {
			Conexao.fecharConexao(conn);
		}
		
		return this.obter(objeto.getIdTipoPagamento());
	}

	public void excluir(Serializable chave) throws Exception {
		
		Connection conn = null;
		PreparedStatement ps = null;
		
		try {
			conn = Conexao.criarConexao();
			
			StringBuffer sql = new StringBuffer();
			sql.append("delete from damazzy.tipopagamento where idtipopagamento = ?");
			
			ps = conn.prepareStatement(sql.toString());
			
			Integer id = (Integer) chave;
			ps.setInt(1, id);
			
			ps.executeUpdate();
			
		} catch (Exception e) {
			e.printStackTrace();
			throw new Exception("Erro ao excluir o tipo de pagamento.");
		} finally {
			Conexao.fecharConexao(conn);
		}
	}

	public TipoPagamento incluir(TipoPagamento objeto) throws Exception {

		Connection conn = null;
		PreparedStatement ps = null;
		int cont = 1;
		
		try {
			conn = Conexao.criarConexao();
			
			StringBuffer sql = new StringBuffer();
			sql.append("insert into damazzy.tipopagamento (desctipopagamento, bolativo) values (?, ?)");
			
			ps = conn.prepareStatement(sql.toString());
			ps.setString(cont++, objeto.getDescTipoPagamento());
			ps.setBoolean(cont++, objeto.getBolAtivo());
			
			ps.executeUpdate();
			
		} catch (Exception e) {
			e.printStackTrace();
			throw new Exception("Erro ao incluir o tipo de pagamento.");
		} finally {
			Conexao.fecharConexao(conn);
		}
		
		return null;
	}

	public List<TipoPagamento> listar() throws Exception {
		return this.pesquisar(new TipoPagamento());
	}

	public TipoPagamento obter(Serializable chave) throws Exception {
		
		TipoPagamento tipoPagamento = null;
		Connection conn = null;
		PreparedStatement ps = null;
		ResultSet rs = null;
		
		try {
			conn = Conexao.criarConexao();
			
			StringBuffer sql = new StringBuffer();
			sql.append("select * from damazzy.tipopagamento where idtipopagamento = ?");
			
			ps = conn.prepareStatement(sql.toString());
			
			Integer id = (Integer) chave;
			ps.setInt(1, id);
			
			rs = ps.executeQuery();
			
			if (rs.next()) {
				tipoPagamento = new TipoPagamento();
				
				tipoPagamento.setIdTipoPagamento(rs.getInt("idtipopagamento"));
				tipoPagamento.setDescTipoPagamento(rs.getString("desctipopagamento"));
				tipoPagamento.setBolAtivo(rs.getBoolean("bolativo"));
			}
			
		} catch (Exception e) {
			e.printStackTrace();
			throw new Exception("Erro ao obter o tipo de pagamento.");
		} finally {
			Conexao.fecharConexao(conn);
		}
		
		return tipoPagamento;
	}

	public List<TipoPagamento> pesquisar(TipoPagamento objeto) throws Exception {
		
		TipoPagamento tpFiltro = objeto;
		TipoPagamento tipoPagamento;
		Connection conn = null;
		PreparedStatement ps = null;
		ResultSet rs = null;
		List<TipoPagamento> tiposPagamento = new ArrayList<TipoPagamento>();
		
		try {
			conn = Conexao.criarConexao();
			
			StringBuffer sql = new StringBuffer();
			sql.append("select * from damazzy.tipopagamento where 1 = 1 ");
			
			if (tpFiltro.getDescTipoPagamento() != null) {
				sql.append("and desctipopagamento like '%" + tpFiltro.getDescTipoPagamento() + "%'");
			}
			
			if (tpFiltro.getBolAtivo() != null) {
				sql.append("and bolativo = " + tpFiltro.getBolAtivo());
			}
			
			sql.append(" order by desctipopagamento");
			
			ps = conn.prepareStatement(sql.toString());
			rs = ps.executeQuery();
			
			while (rs.next()) {
				tipoPagamento = new TipoPagamento();
				
				tipoPagamento.setIdTipoPagamento(rs.getInt("idtipopagamento"));
				tipoPagamento.setDescTipoPagamento(rs.getString("desctipopagamento"));
				tipoPagamento.setBolAtivo(rs.getBoolean("bolativo"));
				
				tiposPagamento.add(tipoPagamento);
			}
			
		} catch (Exception e) {
			e.printStackTrace();
			throw new Exception("Erro ao pesquisar os tipos de pagamento.");
		} finally {
			Conexao.fecharConexao(conn);
		}
		
		return tiposPagamento;
	}
}
